import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

pd.set_option('display.max_columns', None, 'display.expand_frame_repr', False)

# 1.	针对多项式朴素贝叶斯进行分析
# (1)	数据导入
# ①	读取bayes_lihang.txt信息（10分）
df = pd.read_csv(r'bayes_lihang.txt',
                 header=0)
# print(len(df))
# print(df[:5])

# ②	将前两列作为x，最后一列作为y（10分）
x = df.iloc[:, :2]
y = df.iloc[:, -1]
# print(x[:5])
# print(y[:5])

# (2)	数据预处理
# ①	将第二个特征进行标签化处理（10分）
from sklearn.preprocessing import LabelEncoder
enc = LabelEncoder()
y = enc.fit_transform(y)
x.iloc[:, 1] = enc.fit_transform(x.iloc[:, 1])
# print(y[:5])

# (3)	模型处理
# ①	调用多项式朴素贝叶斯（10分）
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB()

# ②	拟合数据，并预测结果（10分）
model.fit(x, y)
h = model.predict(x)

# ③	打印每个数据的预测概率（10分）
proba = model.predict_proba(x)
print(proba)

# (4)	模型评测
from sklearn.metrics import accuracy_score, classification_report, roc_curve, roc_auc_score
# ①	打印模型准确率（10分）
print(f'模型准确率:{accuracy_score(y, h)}')

# ②	打印模型分类报告（10分）
print('模型分类报告')
print(classification_report(y, h))

# ③	打印roc曲线（10分）
fpr, tpr, threa = roc_curve(y, proba[:, 1])
plt.plot(fpr, tpr)
for i, t in enumerate(threa):
    plt.annotate(f'{t:.2f}', xy=[fpr[i], tpr[i]])

# ④	打印auc数值（10分）
print(f'auc数值:{accuracy_score(y, h)}')

# Show all drawings
plt.show()
